<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 数组去重 

    // (1) 将重复项删掉 
    // 先取数组中的第一个元素,和后面的所有元素比较,如果存在和它数值相同的元素 -> 删除
    // 在取出组中的第二个元素,和后面的所有元素比较,如果存在和它数值相同的元素 -> 删除
    // 以此类推 -> 知道取出倒数第二个


    var list = [1, 2, 3, 3, 3, 3, 3, 2, 3, 1];  // => [1, 2, 3]

    //   下标      0  1  2  3  4  5  6
    // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];

    // for (var i = 0; i < list.length; i++) { // 依次取出数组中的每一个元素
    //     // list[i] -> 第i个元素  (0 1 2 3 ...)
    //     for (var j = i + 1; j < list.length; j++) { //后面的所有元素
    //         if (list[i] === list[j]) {
    //             list.splice(j, 1);//删除后面的元素
    //         }
    //     }
    // }
    // console.log(list);


    // 问题:
    // 由于数组塌陷(前面的元素被删除 后面的元素批量前移 占据被删除元素的位置) -> 出现漏网之鱼

    // 解决方法1: 从后向前删

    // var list = [1, 2, 3, 3, 3, 3, 3, 2, 3, 1];  // => [1, 2, 3
    // //   下标      0  1  2  3  4  5  6
    // // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
    // for (var i = 0; i < list.length; i++) { // 依次取出数组中的每一个元素
    //     // list[i] -> 第i个元素  (0 1 2 3 ...)
    //     for (var j = list.length - 1; j >= i + 1; j--) { //后面的所有元素(倒着遍历)
    //         if (list[i] === list[j]) {
    //             list.splice(j, 1);//删除后面的元素
    //         }
    //     }
    // }
    // console.log(list);


    // 解决方法2: 我们已知删除前面的元素之后,后面的元素会批量前移,占据被删除元素的位置 -> 上次还从这个位置开始删

    /* var list = [1, 2, 3, 3, 3, 3, 3, 2, 3, 1];  // => [1, 2, 3]

    // debugger;

    //   下标      0  1  2  3  4  5  6
    // var list = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
    for (var i = 0; i < list.length; i++) { // 依次取出数组中的每一个元素
        // list[i] -> 第i个元素  (0 1 2 3 ...)
        for (var j = i + 1; j < list.length; j++) { //后面的所有元素
            if (list[i] === list[j]) {
                list.splice(j, 1);//删除后面的元素
                j--; // 假设j = 2时元素被删除 j-- => 1  => j++ => 2
            }
        }
    }
    console.log(list); */


    // (2)  新建数组去重  -> 遍历原数组 -> 依次取出数组中的每一个元素 -> 如果新数组没有该元素=>就放一个 有的话就跳过
    var list = [1, 2, 3, 3, 3, 3, 3, 2, 3, 1];
    var unique = [];
    for (var i = 0; i < list.length; i++) {
        var item = list[i]; //依次取出数组中的每一个元素
        // if (unique.includes(item) == false) { // 新数组中不存在
        //     unique.push(item);
        // }

        // !unique.includes(item) == true  =>  unique.includes(item) ==false 
        if (!unique.includes(item)) { // 新数组中不存在
            unique.push(item);
        }
    }
    console.log(unique);

    function noRepeat(list) {
        // var list = [1, 2, 3, 3, 3, 3, 3, 2, 3, 1];
        var unique = [];
        for (var i = 0; i < list.length; i++) {
            var item = list[i]; //依次取出数组中的每一个元素
            // if (unique.includes(item) == false) { // 新数组中不存在
            //     unique.push(item);
            // }

            // !unique.includes(item) == true  =>  unique.includes(item) ==false 
            if (!unique.includes(item)) { // 新数组中不存在
                unique.push(item);
            }
        }
        // console.log(unique);
        return unique;
    }








</script>

</html>